package com.jinxinol.core.util;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

public abstract class ClassTypeUtils {

	/**
	 * <p>
	 * 判断class是否是Array。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是数组类型。
	 */
	static public boolean isArray(Object obj) {
		return obj instanceof Object[];
	}

	/**
	 * <p>
	 * 判断class是否是map。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是Map类型。
	 */
	static public boolean isMap(Object obj) {
		return (obj instanceof Map);
	}

	/**
	 * <p>
	 * 判断class是否是Set。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是Set类型。
	 */
	static public boolean isSet(Object obj) {
		return (obj instanceof Set);
	}

	/**
	 * <p>
	 * 判断class是否是Collection。
	 * <p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是Collection类型。
	 */
	static public boolean isCollection(Object obj) {
		return (obj instanceof Collection);
	}

	/**
	 * <p>
	 * 判断class是否是list。
	 * <p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是List类型。
	 */
	static public boolean isList(Object obj) {
		return (obj instanceof List);
	}

	/**
	 * <p>
	 * 判断class是否是Date。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是java.util.Date。
	 */
	static public boolean isDate(Object obj) {
		return (obj instanceof Date);
	}

	/**
	 * <p>
	 * 判断class是否是Enum。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是Enum。
	 */
	static public boolean isEnum(Object obj) {
		return obj.getClass().isEnum();
	}

	/**
	 * <p>
	 * 判断class是否是java.lang中的基本对象。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是java.lang中的基本类型。
	 */
	static public boolean isBase(Object obj) {
		String className = obj.getClass().getName();
		return className.startsWith("java.lang") && !className.endsWith("[]");
	}

	/**
	 * <p>
	 * 判断class是否是int,float等简单对象。
	 * </p>
	 * 
	 * @param obj
	 *            对象实例。
	 * @return boolean 是否是java.lang中的简单类型。
	 */
	static public boolean isSimple(Object obj) {
		String className = obj.getClass().getName();
		return className.equals("byte") || className.equals("int")
				|| className.equals("float") || className.equals("short")
				|| className.equals("long") || className.equals("double")
				|| className.equals("boolean");
	}

	/**
	 * <p>
	 * 将简单类型转换为基本类型。
	 * </p>
	 * 
	 * @param className
	 *            java类名称。
	 * @return String 基本类名称。
	 */
	static public String convertType(String className) {
		if (className.equals("byte"))
			return "java.lang.Byte";
		if (className.equals("int"))
			return "java.lang.Integer";
		if (className.equals("float"))
			return "java.lang.Float";
		if (className.equals("short"))
			return "java.lang.Short";
		if (className.equals("long"))
			return "java.lang.Long";
		if (className.equals("Double"))
			return "java.lang.Double";
		if (className.equals("boolean"))
			return "java.lang.Boolean";
		return null;
	}

}
